<?php
class PbannerAdvertsController extends PbannerAppController {

	public $uses = array('PbannerAdvert', 'PbannerRule', 'PbannerBanner');

	/**
	 * Tipos de imagens aceitas
	 *
	 * @var array
	 */
	public $types = array(
		'image/bmp',
		'image/gif',
		'image/jpeg',
		'image/png'
	);

	/**
	 * Este methodo é responsavel por direcionar um caminho para o destino dos arquivos normalizando-os
	 *
	 * @param String $name = null
	 * @return String
	 */
	public function path($name = null){
		$name = str_replace(' ', '_',$name);
		return array('name' => $name, 'path' => dirname(dirname(__FILE__)) . DS . 'vendors' . DS . 'file' . DS . 'banners' . DS . $name);
	}

	/**
	 * Index
	 *
	 */
	public function index(){
		$this->render();
	}

	/**
	 * Cria um novo anuncio
	 *
	 */
	public function add_advert(){
		if(isset($this->data['PbannerAdvert'])){
			$this->PbannerAdvert->set($this->data['PbannerAdvert']);
			$this->PbannerAdvert->save();
			$this->Session->setFlash('Anuncio criado com sucesso, escolha a regra', 'default', array(), 'sucesso');
			$this->redirect('/pbanner/pbanner_adverts/rule/' . $this->PbannerAdvert->id);
		}

		$adverts = $this->PbannerAdvert->find('all');
		$this->set('adverts', $adverts);
		$this->render();
	}

	/**
	 * Criar a regra base para a campanha
	 *
	 */
	public function rule($id = null){
		if($id != null){
			if(isset($this->data['PbannerRule'])){
				$this->PbannerAdvert->id = $id;
				$this->PbannerAdvert->saveField('rule_id', $this->data['PbannerRule']['rule']);
				$this->Session->setFlash('Criação de anuncio concluida, agora so falta criar os banner', 'default', array(), 'sucesso');
				$this->PbannerRule->id = $this->data['PbannerRule']['rule'];
				$rule = $this->PbannerRule->read();
				$this->redirect('/pbanner/pbanner_adverts/' . $rule['PbannerRule']['action'] . '/' . $id . '/' . $this->data['PbannerRule']['rule']);
			}
			$rules = $this->PbannerRule->find('all');
			$this->set('rules', $rules);

			$this->render();
		}else{
			$this->Session->setFlash('Erro, não é possivel acessar esta pagina', 'default', array(), 'erro');
			$this->redirect($this->referer());
		}
	}

	/**
	 * Methodo responsavel por adicionar os banners de acordo com a regra Grupo de banners
	 *
	 * @param int $id_advert = null
	 * @param int $id_rule = null
	 */
	public function group_banners($advert_id = null, $rule_id = null){
		if($advert_id != null && $rule_id != null){
			if(isset($this->data['PbannerBanner'])){

				switch($this->data['PbannerBanner']['file']['error']){
					case 0:
						if(in_array($this->data['PbannerBanner']['file']['type'], $this->types)){

							$path = $this->path($this->data['PbannerBanner']['file']['name']);

							if(@move_uploaded_file($this->data['PbannerBanner']['file']['tmp_name'], $path['path'])){

								$order = $this->PbannerBanner->find('first', array(
									'conditions' => array('PbannerBanner.advert_id' => $advert_id, 'PbannerBanner.rule_id' => $rule_id),
									'fields' => 'PbannerBanner.order',
									'order' => array('PbannerBanner.order DESC')
								));

								if(!isset($order['PbannerBanner']['order'])){
									$data = array('PbannerBanner' => array(
										'advert_id' => $advert_id,
										'rule_id' => $rule_id,
										'name' => $this->data['PbannerBanner']['name'],
										'order' => 0,
										'file' => $path['name']
									));
								}else{
									$data = array('PbannerBanner' => array(
										'advert_id' => $advert_id,
										'rule_id' => $rule_id,
										'name' => $this->data['PbannerBanner']['name'],
										'order' => ++$order['PbannerBanner']['order'],
										'file' => $path['name']
									));
								}

								$this->PbannerBanner->set($data);
								$this->PbannerBanner->save();

								$this->Session->setFlash('Upload concluido com sucesso', 'default', array(), 'sucesso');
								$this->redirect($this->referer());
							}else{
								$this->Session->setFlash('Erro desconhecido ao tentar efetuar o upload', 'default', array(), 'erro');
								$this->redirect($this->referer());
							}
						}else{
							$this->Session->setFlash('Tipo de imagem não aceita', 'default', array(), 'erro');
							$this->redirect($this->referer());
						}
					break;
					case 1:
						$this->Session->setFlash('O arquivo no upload é maior do que o limite definido.', 'default', array(), 'erro');
						$this->redirect($this->referer());
					break;
					case 2:
						$this->Session->setFlash('O arquivo ultrapassa o limite de tamanho.', 'default', array(), 'erro');
						$this->redirect($this->referer());
					break;
					case 3:
						$this->Session->setFlash('O upload do arquivo foi feito parcialmente.', 'default', array(), 'erro');
						$this->redirect($this->referer());
					break;
					case 4:
						$this->Session->setFlash('Não foi feito o upload do arquivo.', 'default', array(), 'erro');
						$this->redirect($this->referer());
					break;
					default:
						$this->Session->setFlash('Erro desconhecido.', 'default', array(), 'erro');
						$this->redirect($this->referer());
				}
			}else{
				$banners = $this->PbannerBanner->find('all', array(
					'conditions' => array('PbannerBanner.id' => $advert_id),
					'order' => array('PbannerBanner.order ASC')
				));
				$this->set('banners', $banners);

				$this->render();
			}
		}else{
			$this->Session->setFlash('Erro, não é possivel acessar esta pagina', 'default', array(), 'erro');
			$this->redirect($this->referer());
		}
	}

	/**
	 * Adicionar banners a campanha
	 *
	 */
	public function add_banner(){
		$this->render();
	}

	/**
	 * Deleta o anuncio
	 *
	 * @param int $id = null
	 */
	public function delete($id = null){
		if($id){
			$this->PbannerAdvert->del($id);
			$this->Session->setFlash('Anuncio deletado com sucesso', 'default', array(), 'sucesso');
			$this->redirect($this->referer());
		}
	}

	/**
	 * Altera o status do anuncio
	 *
	 * @param int $id = null
	 */
	public function mode_status($id = null){
		if($id){
			$this->PbannerAdvert->id = $id;
			$advert_status = $this->PbannerAdvert->read();

			if($advert_status['PbannerAdvert']['active'] == 1){
				$this->PbannerAdvert->saveField('active', 0);
			}else{
				if(empty($advert_status['PbannerAdvert']['rule_id'])){
					$this->Session->setFlash('Para ativar o anuncio é necessário concluir a configuração do mesmo.', 'default', array(), 'info');
					$this->redirect('/pbanner/pbanner_adverts/rule/' . $id);
				}else{
					$this->PbannerAdvert->saveField('active', 1);
				}
			}
			$this->Session->setFlash('Status modificado com sucesso', 'default', array(), 'sucesso');
			$this->redirect($this->referer());
		}
	}

	public function change_order($banner_id = null, $order = null, $action = null){

		if($banner_id != null && $action != null && $order != null){

			if($action == 'down'){

				$next = $this->PbannerBanner->find('first', array(
					'conditions' => array('PbannerBanner.order' => ($order + 1)),
					'fields' => array('PbannerBanner.id', 'PbannerBanner.order')
				));

				$this->PbannerBanner->id = $banner_id;
				$this->PbannerBanner->saveField('order', $next['PbannerBanner']['order']);
				$this->PbannerBanner->id = $next['PbannerBanner']['id'];
				$this->PbannerBanner->saveField('order', $order);

				$this->redirect($this->referer());

			}elseif($action == 'up'){

				$previous = $this->PbannerBanner->find('first', array(
					'conditions' => array('PbannerBanner.order' => ($order - 1)),
					'fields' => array('PbannerBanner.id', 'PbannerBanner.order')
				));

				$this->PbannerBanner->id = $banner_id;
				$this->PbannerBanner->saveField('order', $previous['PbannerBanner']['order']);
				$this->PbannerBanner->id = $previous['PbannerBanner']['id'];
				$this->PbannerBanner->saveField('order', $order);

				$this->redirect($this->referer());

			}

		}else{

			$this->Session->setFlash('Erro, não é possivel acessar esta pagina', 'default', array(), 'erro');
			$this->redirect($this->referer());
		}

	}

	public function delete_banner($banner_id = null, $length = null, $order = null){

		if($banner_id != null && $length != null && $order != null){

			if(($length + 1) == $order){

				$this->PbannerBanner->del($banner_id);

				$this->Session->setFlash('Banner deletado com sucesso', 'default', array(), 'sucesso');
				$this->redirect($this->referer());

			}else{

				$this->PbannerBanner->del($banner_id);

				for($i = ($order + 1); $i < $length; $i++){

					$banner = $this->PbannerBanner->find('first', array(
						'conditions' => array('PbannerBanner.order' => $i),
						'fields' => array('PbannerBanner.id', 'PbannerBanner.order')
					));

					$this->PbannerBanner->id = $banner['PbannerBanner']['id'];
					$this->PbannerBanner->saveField('order', ($banner['PbannerBanner']['order'] - 1));

				}

				$this->Session->setFlash('Banner deletado com sucesso', 'default', array(), 'sucesso');
				$this->redirect($this->referer());

			}

		}else{

			$this->Session->setFlash('Erro, não é possivel acessar esta pagina', 'default', array(), 'erro');
			$this->redirect($this->referer());

		}
	}

	/**
	 * Executa depois da ação do controller
	 * seta o menu no layout
	 *
	 */
	public function beforeRender(){
		$this->set('menu', array(
			'menu' => array(
				'Adverts' => array('plugin' => 'pbanner', 'controller' => 'pbanner_adverts', 'action' => 'index'),
				'Anuncios' => array('plugin' => 'pbanner', 'controller' => 'pbanner_adverts', 'action' => 'add_advert')
			)
		));
	}
}